package org.online.servlet;

import com.google.gson.Gson;
import org.online.vo.ResultVO;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 所有Servlet的父类，把所有公共代码抽象在此父类中定义
 * 各个子类可以重用父类的代码（代码重用） - 提高代码的维护性
 */
public class BaseServlet extends HttpServlet {

    /**
     * 成功数据的封装
     * @param code
     * @param msg
     * @param data
     * @return
     */
    public ResultVO success(Integer code,String msg,Object data) {
        ResultVO resultVO = new ResultVO() ;
        resultVO.setCode(code);
        resultVO.setMsg(msg);
        resultVO.setData(data);
        return resultVO ;
    }

    /**
     * 失败数据的封装
     * @param code
     * @param msg
     * @param data
     * @return
     */
    public ResultVO error(Integer code,String msg,Object data) {
        ResultVO resultVO = new ResultVO() ;
        resultVO.setCode(code);
        resultVO.setMsg(msg);
        resultVO.setData(data);
        return resultVO ;
    }

    // 重载相关的方法...


    /**
     * 打印输出 ResultVO
     * @param resp
     * @param resultVO
     */
    // public void print(PrintWriter out, ResultVO resultVO) {
    public void print(HttpServletResponse resp, ResultVO resultVO) throws IOException {
        // 1) 设置响应数据的类型和字符编码
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("application/json;charset=UTF-8");

        // 2)获取打印输出流对象
        PrintWriter out = resp.getWriter();

        // 3)把响应的数据，统一封装到ResultVO
        // xxx.xxx.xxx@12312asd

        // 4)把数据(ResultVO) 转换为　JSON　字符串
        String json = new Gson().toJson(resultVO);

        // 5）JSON字符串，打印输出到浏览器中
        out.print(json);

        // 6)清空缓存并关闭输出流对象
        out.flush();
        out.close();
    }
}
